package edu.yuhf.tts.dao;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

import edu.yuhf.dbutil.JdbcTemplate;
import edu.yuhf.tts.domain.Train;
import edu.yuhf.tts.domain.Train2List;

public class QueryDao {
		
	//根据日期和火车号从数据库获得票价
		public Train  queryByTrainId(String trainId,LocalDate date) {
			List<Object> params=new ArrayList<>();
			params.add(trainId);
			DateTimeFormatter dft=DateTimeFormatter.ofPattern("yyyy-MM-dd");
//			params.add(dft.format(date));			//Object
			Object date1=dft.format(date);          //也不知道为什么object 就tm好使？？？ date  loaclDate 就不好使？？？
			String sql="select * from tts_traininfo where trainId=? and \"date\"=to_date(?,'yyyy-mm-dd')";
			
			Train train=JdbcTemplate.query(sql, (rs)->{
				Train train0=null;
				try {
					while(rs.next()) {
						train0=new Train(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getDate(5).toLocalDate(),rs.getTime(6).toLocalTime(),rs.getBigDecimal(7));
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
				return train0;
			},trainId,date1);				//此处不能有date类型或者localdate类型
			
			return train;					//返回票价
		}
		
		//列车查询 根据出发地和目的地（必须） 和 火车号 and 出发日期
		public List<Train> queryTrain(Train train){
			String sql="select * from tts_traininfo where \"fromAddress\"=? and \"toAddress\"=?";
			if(train.getTrainId().length()!=0) {
				sql+=" and trainid=?";
			}
			if(train.getDate()!=null) {
				sql+=" and \"date\"=to_date(?,'yyyy-mm-dd')";	
			}
		
			List<Object> params=new ArrayList<>();
			params.add(train.getFromAddress());
			params.add(train.getToAddress());
			if(train.getTrainId().length()!=0) {
				params.add(train.getTrainId());
			}
			if(null!=train.getDate()) {
				DateTimeFormatter dft=DateTimeFormatter.ofPattern("yyyy-MM-dd");
				params.add(dft.format(train.getDate()));  				//format格式化指定时间 为dft格式的字符串 添加到Object数组
			}	
			
//			List<Train> list=JdbcTemplate.query(sql,(rs)->{
//				List<Train> list0=new ArrayList<>();
//				try {
//					while(rs.next()) {
//				Train train0=new Train(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getDate(5).toLocalDate(),rs.getTime(6).toLocalTime(),rs.getBigDecimal(7));
//					list0.add(train0);
//					}
//				} catch (SQLException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//				return list0;
//			}, params.toArray());
			List<Train> list=JdbcTemplate.query(sql,new Train2List(), params.toArray()); 
			return list;
		}
		
}
